home *** CD-ROM | disk | FTP | other *** search
- // Message
- message Drag(Gui_Component _pComponent,i32x _iDeltaX,i32x _iDeltaY);
-
- // Dragger Data
- class Gui_dtDragger
- {
- var boolx bMoving;
- var i32x iX;
- var i32x iY;
-
- var i32x iDeltaX;
- var i32x iDeltaY;
-
- var i32x iAccuX;
- var i32x iAccuY;
- };
-
-
- func i32x Dragger_OnMouseUp(i32x _iX,i32x _iY,i32x _iButton);
- func i32x Dragger_OnMouseDown(i32x _iX,i32x _iY,i32x _iButton);
- func i32x Dragger_OnMouseMove(i32x _iX,i32x _iY);
-
- // Message handling interface
- interface Gui_iBitmapDragger
- {
- // Gui System Messages
- Dragger_OnMouseDown MouseDown;
- Dragger_OnMouseUp MouseUp;
- Dragger_OnMouseMove MouseMove;
- }
-
- func Gui_Component NewDragger(Menu_Material _pMaterial,i32x _iDeltaX,i32x _iDeltaY);
-
- /*
- * Function : Dragger initializer
- * Parameters : _pMaterial material pointer
- */
- func Gui_Component NewDragger(Menu_Material _pMaterial,i32x _iDeltaX,i32x _iDeltaY)
- {
- var Menu_Sprite sprite;
- var Gui_Component container;
- var Gui_dtDragger pdtDragger;
- var f32x sx,sy;
- var i32x iArea;
-
- // Create container with button interface
- container = NewContainer(Gui_iBitmapDragger);
-
- // Create a sprite with material and area index e_GUI_State_Enabled
- sprite = NewSprite2D(_pMaterial);
- iArea = e_GUI_State_Enabled;
- SetArea(sprite,iArea);
-
- // Get size of area of index e_GUI_State_Enabled
- sx = GetAreaWidth(_pMaterial,iArea);
- sy = GetAreaHeight(_pMaterial,iArea);
-
- // Strech container to area size
- StretchTo(container,sx,sy);
-
- // Define default align left/top (quicker than zoom)
- SetAlign(container,e_GUI_HAlign_Left,e_GUI_VAlign_Top);
-
- // Attach the sprite to this container
- AttachSprite(container,sprite);
-
- // Tell Gui to clip this sprite to container size
- Clip(container);
-
- pdtDragger = new Gui_dtDragger;
- pdtDragger.bMoving = false;
- pdtDragger.iX = 0;
- pdtDragger.iY = 0;
-
- if(_iDeltaX>=1)
- pdtDragger.iDeltaX=_iDeltaX;
- else
- pdtDragger.iDeltaX=1;
-
- if(_iDeltaY>=1)
- pdtDragger.iDeltaY=_iDeltaY;
- else
- pdtDragger.iDeltaY=1;
-
- pdtDragger.iAccuX=0;
- pdtDragger.iAccuY=0;
-
- SetData(container,pdtDragger);
-
- // Change interface to dragger interface
- SetInterface(container,Gui_iBitmapDragger);
-
- return container;
- }
-
-
- func i32x Dragger_OnMouseDown(i32x _iX,i32x _iY,i32x _iButton)
- {
- var Gui_Component pthis;
- var Gui_dtDragger pdtDragger;
-
- pthis =GetThis();
- pdtDragger = GetData(pthis);
- pdtDragger.bMoving=1;
- pdtDragger.iX = _iX;
- pdtDragger.iY = _iY;
- pdtDragger.iAccuX=0;
- pdtDragger.iAccuY=0;
- }
-
- func i32x Dragger_OnMouseUp(i32x _iX,i32x _iY,i32x _iButton)
- {
- var Gui_Component pthis;
- var Gui_dtDragger pdtDragger;
-
- pthis =GetThis();
- pdtDragger = GetData(pthis);
- pdtDragger.bMoving=0;
- pdtDragger.iAccuX=0;
- pdtDragger.iAccuY=0;
- }
-
- func i32x Dragger_OnMouseMove(i32x _iX,i32x _iY)
- {
- var Gui_Component pthis;
- var Gui_dtDragger pdtDragger;
-
- pthis =GetThis();
- pdtDragger = GetData(pthis);
-
- if(pdtDragger.bMoving)
- {
- var i32x iDeltaX,iDeltaY,iMustDragParent;
- var Gui_Component pparent;
-
- iDeltaX=_iX-pdtDragger.iX;
- iDeltaY=_iY-pdtDragger.iY;
-
- pdtDragger.iAccuX=pdtDragger.iAccuX+iDeltaX;
- pdtDragger.iAccuY=pdtDragger.iAccuY+iDeltaY;
-
- pdtDragger.iX = _iX;
- pdtDragger.iY = _iY;
-
-
- iMustDragParent=0;
- iDeltaX=0;
- iDeltaY=0;
-
- if((pdtDragger.iAccuX>=pdtDragger.iDeltaX)||(pdtDragger.iAccuX<=-pdtDragger.iDeltaX))
- {
- iDeltaX=(pdtDragger.iAccuX/pdtDragger.iDeltaX)*pdtDragger.iDeltaX;
- pdtDragger.iAccuX=pdtDragger.iAccuX-iDeltaX;
- iMustDragParent=1;
- }
- if((pdtDragger.iAccuY>=pdtDragger.iDeltaY)||(pdtDragger.iAccuY<=-pdtDragger.iDeltaY))
- {
- iDeltaY=(pdtDragger.iAccuY/pdtDragger.iDeltaY)*pdtDragger.iDeltaY;
- pdtDragger.iAccuY=pdtDragger.iAccuY-iDeltaY;
- iMustDragParent=1;
- }
-
- if(iMustDragParent)
- {
- pparent = GetParent(pthis);
- pparent<<Drag(pthis,iDeltaX,iDeltaY);
- }
- }//if(pdtDragger.bMoving)
- }
-
-
-
-